//
// Created by francklinson on 2021/6/29.
//


//https://www.cnblogs.com/jiading/p/11653911.html

#include <random>
#include<iostream>

using namespace std;//要是不使用std名字空间，下面的就都需要加std::
void formData() {
//    random_device一般只用来做种子，C++11中常用来做为伪随机数算法的有以下几种：
//
//    linear_congruential_engine线性同余法,这种速度最快、最常用
//    mersenne_twister_engine梅森旋转法，这种生成的随机数质量比较高
//    substract_with_carry_engine滞后Fibonacci


    random_device sd;//生成random_device对象sd做种子
    minstd_rand linearRan(
            sd());//使用种子初始化linear_congruential_engine对象，为的是使用它来做我们下面随机分布的种子以输出多个随机分布.注意这里要使用()操作符，因为minst_rand()接受的是一个值（你用srand也是给出这样的一个值）
    uniform_int_distribution<int> dis1(0, 9);//生成01序列
    for (int i = 0; i < 10; i++) {
        cout << dis1(linearRan)
             << endl;//使用linear engine做种子，注意这里传入的不是一个值而是一个引擎:
             // 【随机分布函数需要传入一个随机数引擎作为参数，其实random_device也是一个引擎，这里把sd传入也不会出错】
    }
}

int main() {
    formData();
}